package com.gutou.yeaicodemother.core.saver;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.gutou.yeaicodemother.ai.model.HtmlCodeResult;
import com.gutou.yeaicodemother.ai.model.MultiFileCodeResult;
import com.gutou.yeaicodemother.model.enums.CodeGenTypeEnum;

import java.io.File;
import java.nio.charset.StandardCharsets;

/**
 * CodeFileSaver 类用于保存代码生成的结果文件到本地文件系统
 * 支持保存HTML代码结果和多文件代码结果
 */
@Deprecated
public class CodeFileSaver {

    // 文件保存根目录，使用系统当前工作目录下的tmp/code_output作为根目录
    private static final String FILE_SAVE_ROOT_DIR = System.getProperty("user.dir") + "/tmp/code_output";

    /**
     * 保存 HtmlCodeResult对象中的HTML代码到文件
     * @param result 包含HTML代码的HtmlCodeResult对象
     * @return 保存文件所在目录的File对象
     */
    public static File saveHtmlCodeResult(HtmlCodeResult result) {
        // 根据业务类型构建唯一目录路径
        String baseDirPath = buildUniqueDir(CodeGenTypeEnum.HTML.getValue());
        // 将HTML代码写入到index.html文件中
        writeToFile(baseDirPath, "index.html", result.getHtmlCode());
        return new File(baseDirPath);
    }

    /**
     * 保存 MultiFileCodeResult对象中的HTML、CSS和JS代码到文件
     * @param result 包含HTML、CSS和JS代码的MultiFileCodeResult对象
     * @return 保存文件所在目录的File对象
     */
    public static File saveMultiFileCodeResult(MultiFileCodeResult result) {
        // 根据业务类型构建唯一目录路径
        String baseDirPath = buildUniqueDir(CodeGenTypeEnum.MULTI_FILE.getValue());
        // 将HTML、CSS和JS代码分别写入到对应的文件中
        writeToFile(baseDirPath, "index.html", result.getHtmlCode());
        writeToFile(baseDirPath, "style.css", result.getCssCode());
        writeToFile(baseDirPath, "script.js", result.getJsCode());
        return new File(baseDirPath);
    }

    /**
     * 构建唯一目录路径：tmp/code_output/bizType_雪花ID
     */
    private static String buildUniqueDir(String bizType) {
        String uniqueDirName = StrUtil.format("{}_{}", bizType, IdUtil.getSnowflakeNextIdStr());
        String dirPath = FILE_SAVE_ROOT_DIR + File.separator + uniqueDirName;
        FileUtil.mkdir(dirPath);
        return dirPath;
    }

    /**
     * 写入单个文件
     */
    private static void writeToFile(String dirPath, String filename, String content) {
        String filePath = dirPath + File.separator + filename;
        FileUtil.writeString(content, filePath, StandardCharsets.UTF_8);
    }
}

